# xpath 解析 ：最常用最便捷高效的一种解析方式，通用性
#    xpath解析原理：
     # 1.实例化一个etree的对象，其需要将被解析的页面源代码数据加载到该对象中
     # 2. 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的获取
     #  环境的安装  pip install lxml  (解析器)

     #如何实例化一个etree对象:  from lxml import etree
    #1 将本地的html文档中的源 代码数据加载到etree对象中
    # ：etree.parse(filepath)   #文（）件路径
    #2. 可以重富连网上获取的源码数据加载到该对象中：
    # etree.HTML('page_text')
    ###  xpath('xpath表达式')
     #  /:表示从根节点开始定位。表示一个层级、
     # //：表示多个层级，可以表示多个层级。  r=tree.xpath('/html/head/title')  #'/html//title'  '//title'
    #  属性定位：//div[@class="song"]   固定写法，实现属性定位
     # r=tree.xpath('//div[@class="song"]/p[3]')  索引定位：索引定位开始为1
    #取文本
    #r=tree.xpath('//div[@class="song"]/p[3].test')
     # /test()获取直系标签内容   //test() 标签非直系所有的标签文本内容
    #取属性值
     #  / @  attName属性名称

#xpath 表达式


# 爬取58二手房
    #实例化一个etree对象，#数据解析
    # tree=etree.HTML('page_text')import requests
import requests
from lxml import etree
if __name__ =="__main__":
    #爬取网页源码数据
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
    }
    url='https://cq.58.com/ershoufang/'
    page_text=requests.get(url=url,headers=headers).text
    # tree=etree.parse('test.html')  #本地网站文本路径
    tree=etree.HTML(page_text)
    # xpath 表达式 进行标签的定位
    r_list=tree.xpath('//div[@class="property-content-title"]/h3')  #'/html//title'  #定位title内容 (/ 表示从根节点开始定位)
    fp.open('58.txt','w',encoding='utf-8')
    for li in r_list:
        title=li.xpath('./h3.text()')[0]
        print(title)
        fp.write(title+'\n')


